import click
from .models import db, User


def register_commands(app):
    # 注册名为init-db的Flask命令（执行方式：flask init-db）
    @app.cli.command('init-db')
    # 添加--drop选项：是否先删除现有表再创建（默认不删除）
    @click.option('--drop', is_flag=True, help='Delete existing tables before creating new ones.')
    def init_database(drop):
        """Initialize the database: create tables (or recreate after dropping)."""
        if drop:  # 如果传入--drop参数，先删除所有表（会清空数据）
            db.drop_all()  # Flask-SQLAlchemy提供的删除表方法
        # 创建所有表（仅在表不存在时创建，存在则不操作）
        db.create_all()  # Flask-SQLAlchemy提供的创建表方法
        # 命令行输出成功提示
        click.echo('数据库创建成功!')

    # 注册名为forge的Flask命令（执行方式：flask forge）
    @app.cli.command('forge')
    def forge():
        """Generate fake test data for the database (overwrites existing data)."""
        db.drop_all()  # 先删除所有表（清空原有数据）
        db.create_all()  # 重新创建空表

        # 插入用户数据：创建User实例，添加到数据库会话
        user = User(username="张三", email="test@qq.com", password="123456", student_id=1234, class_id=1234)
        db.session.add(user)  # 暂存到会话（未真正写入数据库）

        # 提交会话：将所有暂存操作真正写入数据库
        db.session.commit()
        # 命令行输出成功提示
        click.echo('测试数据已经生成!')
